A distributed dam sharing database system is a system in which multiple servers access common data. In such a system, it is desirable to enable component systems to be as independent as possible to minimize the degree of coordination required with a concomitant reduction in communication penalties to throughput and response time. This has been difficult in data sharing systems such as Rdb/VMS. The VMS lock manager is an example of a global lock manager that is used to mediate data requests. The notion of private lock management is introduced as a way to permit the servers to perform private locking that reduces global coordination. Private locking makes it possible for servers to execute transactions and to do locking for their clients without frequent calls upon the global lock manager to mediate the data accesses. Private locking improves the performance of data sharing systems yielding an improvement in both SMP and cluster scalability.
The notion of multi-granularity locking is well-known in the art. Lock promotion and demotion have been used by Rdb/VMS processes that expose all lock modes to a global lock manager. Very limited forms of private locking are known, but with an intrinsic sacrifice to concurrency.
Two primary types of distributed database systems are known in the art. The first type of system is referred to herein as a "shared nothing" system. In a "shared nothing" system, each subset (partition) of the data is accessed by only one server at a time. When accessing data from several partitions, messages are needed to orchestrate the execution of each transaction. Further, the two phase commit protocol is usually used to provide coordinated commit.
With partitioned systems, all updates are done by the single server for a partition, lock management for resources of the partition is done at this server and locks are held by transactions running at the server. Other servers can acquire only copies of the data and cannot update the data directly.
A second type of database system is known as a data sharing system. In a data sharing system, multiple servers can access all data simultaneously. Such simultaneous access requires low level coordination, including distributed locking. A single server, does not need to exchange messages with other servers for request execution or for commit coordination when only shared data is accessed. With data sharing, a user may access many resources via a single server, and hence need to perform lock management for the resource. However, remote servers will frequently hold locks on the resource when they have data of the resource present in their database cache. Remote servers may or may not be executing transactions involving a resource, and so can cache data for extended periods, and can frequently relinquish locks on data that is not accessed by an active transaction. Object oriented database systems that perform client caching of data are examples of data sharing systems.
As will be apparent to one of ordinary skill in the field, it is also possible to have hybrids of these systems in which both partitioning and data sharing is used.
Server independence, which means the ability of servers to execute with minimal coordination, is clearly desirable, but represents a problem for data sharing systems, which require coordination protocols to control the management of the database cache, recovery and locking. Recently, advances have been made that permit increased server independence, and hence reduce the overhead for data sharing systems. The development of principles involved in enabling lock management to be done with more independence is a desirable goal. Specifically desirable is a data sharing system in which each server, by holding appropriate global locks on resources, can perform lock management privately on these resources for transactions that it executes. This strategy permits a systematic reduction in the costs associated with distributed lock management.